home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / 011-020 / amok13 / compcontrol / meldung.mod < prev    next >
Text File  |  1993-11-04  |  4KB  |  144 lines

  1. (******************************************************************************)
  2. (*
  3.     PROGRAMMNAME :    Meldung.mod
  4.         VERSION      :  1.00
  5.         
  6.         AUTOR  :    Ralf Kaiser
  7.                 Winckelmanstraße 1
  8.                         5600 Wuppertal 2
  9.                         0202/59 28 10
  10.                         
  11.         Start  :    29.11.88
  12.     Update :    10-12-88
  13.         Ende   :    
  14.  
  15.  
  16. Diese Routine dient dazu, Meldungen an den Benutzer ansprechend auf den
  17. Bildschirm zu bringen. Die Meldung wird als ARRAY OF CHAR an die Routine
  18. uebergeben. Dabei dient der Oderstrich "|" als Zeilentrenner. Folgende
  19. Meldung :
  20. Das|ist ein |Test
  21. würde also so auf den Bildschirm gebracht  :
  22. Das
  23. ist ein
  24. Test
  25.  
  26. Die Meldung wird in einem borderless-Window, das genau in der Mitte des 
  27. Workbenchscreens erscheint, dargestellt.
  28. Dem Window wird dabei durch zeichnen eines zweifarbigen Randes ein 
  29. 3D-Effekt verliehen.
  30.  
  31. Zusätzlich läßt sich noch eine Zeitspanne angeben, nach der das Fenster
  32. geschloßen wird und der Programmablauf fortgesetzt wird. Diese Zeitspanne
  33. wird als INTEGER-Wert, der die Dauer in Ticks (1 Tick = 1/50 sek.) an-
  34. giebt, definiert.
  35.  
  36. *)
  37. (******************************************************************************)
  38.  
  39. IMPLEMENTATION MODULE Meldung;
  40.  
  41. FROM SYSTEM IMPORT
  42.  ADR, BYTE;
  43.  
  44. FROM Arts IMPORT
  45.  BreakPoint, Assert, TermProcedure;
  46.  
  47. FROM Strings IMPORT
  48.  Delete, Insert, Length, Occurs, Copy, first, last;
  49.  
  50. FROM DOS IMPORT
  51.  Delay;
  52.  
  53. FROM Intuition IMPORT
  54.  NewScreen, NewWindow, WindowPtr, ScreenPtr, OpenScreen, OpenWindow,
  55.  ScreenFlags, ScreenFlagSet, customScreen, WindowFlags, IDCMPFlagSet,
  56.  WindowFlagSet, CloseWindow, CloseScreen, ShowTitle;
  57.  
  58. FROM Graphics IMPORT
  59.  Text, RastPortPtr, Move, ViewModes, ViewModeSet, Draw, ScrollRaster,
  60.  SetAPen, SetRast, DrawModes, DrawModeSet, SetDrMd, jam1;
  61.  
  62. FROM IntuiStruct IMPORT
  63.  StructWindow;
  64.  
  65.             
  66. PROCEDURE ShowMeldung (win: WindowPtr; 
  67.                        Mtext : ARRAY OF CHAR; Zeit: INTEGER);
  68.  
  69. BEGIN
  70. Laenge := Length (Mtext);    laengste := 0;               
  71. Zaehler := 0;    ZeilenNr := 0;     
  72. FOR Temp := 0 TO 10 DO
  73.  Delete (Zeile [Temp], 0, 80);
  74.  Zeilenlaenge [Temp] := 0;
  75. END;
  76.  
  77. WHILE Zaehler # Laenge DO
  78.  Zeichen [0] := Mtext [Zaehler];
  79.  IF Zeichen[0] = "|" THEN
  80.   INC (ZeilenNr);
  81.   INC (Zaehler);
  82.  ELSE
  83.   Insert (Zeile [ZeilenNr], -1, Zeichen);
  84.   INC (Zaehler);
  85.   INC (Zeilenlaenge [ZeilenNr]);
  86.  END;
  87. END;
  88.  
  89. Zaehler := 0;    laengste := Length (Zeile [0]);
  90. LOOP
  91.  Temp := Length (Zeile [Zaehler]);
  92.  IF laengste < Temp THEN laengste := Temp END;
  93.  INC (Zaehler);
  94.  IF Zaehler > ZeilenNr THEN EXIT; END;
  95. END;
  96.  
  97. (*    Aufbau der NewWindow-Struktur   *)
  98.  
  99.  Mheight := ZeilenNr * 8 + 20;
  100.  Mwidth  := laengste*8 + 32;
  101.  
  102.  Mtop := 256 DIV 2 - Mheight DIV 2;
  103.  Mleft := 640 DIV 2 - Mwidth DIV 2;
  104.  
  105. StructWindow (nw, Mleft, Mtop, Mwidth, Mheight, 0, 1, IDCMPFlagSet{},
  106.               WindowFlagSet{gimmeZeroZero, borderless}, NIL,
  107.               NIL, ScreenFlagSet{wbenchScreen}); 
  108.  
  109. win := OpenWindow (nw);
  110. Assert (win # NIL, ADR("Sorry, no Window ..."));
  111.  
  112. rp := win^.rPort;
  113. SetRast (rp,3);
  114. SetDrMd (rp, DrawModeSet{complement});
  115. SetAPen (rp,1);
  116. SetDrMd (rp, jam1);
  117. Move (rp, 0, 0);
  118. Draw (rp, win^.width-1, 0);
  119. Draw (rp, win^.width-1, win^.height-1);
  120. SetAPen (rp, 2);
  121. Draw (rp, 0, win^.height-1);
  122. Draw (rp, 0, 1);
  123. SetAPen (rp, 1);
  124.  
  125. FOR Zaehler := 0 TO ZeilenNr DO
  126.  Move (rp, 16, ((Zaehler * 8) + 3) + 10);
  127.  Text (rp, ADR(Zeile [Zaehler]), Length (Zeile [Zaehler]));
  128. END;
  129. Delay (Zeit);
  130. CloseWindow (win);
  131. END ShowMeldung;
  132.  
  133. PROCEDURE Cleanup;
  134. BEGIN
  135. IF win # NIL THEN CloseWindow (win);  END;
  136. win := NIL;
  137. END Cleanup;
  138.  
  139. BEGIN
  140.  
  141. TermProcedure (Cleanup);
  142.  
  143. END Meldung.
  144.